package cn.jy.map.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import cn.jy.map.domain.CollectionRecord;
import cn.jy.map.domain.GjzLc;
import cn.jy.map.domain.JYType;
import cn.jy.map.domain.LinkNurse;
import cn.jy.map.domain.ProviderNurse;
import cn.jy.map.domain.XyDmRounds;
import cn.jy.map.domain.importantProvider;
import cn.jy.map.domain.UnSuccessInformation.BodyCheckJY;
import cn.jy.map.domain.UnSuccessInformation.BodyCheckMX;
import cn.jy.map.domain.UnSuccessInformation.CreateArchives;
import cn.jy.map.domain.UnSuccessInformation.TogetherProvider;
import cn.jy.map.domain.UnSuccessInformation.UpdateLC;
public interface GjzLcMapper {

	/**
	 * 获取某个区域的所有老浆员的轮次表
	 * @param address
	 * @param exceptProviderNos ： 需要除开的那些浆员的卡号列表
	 * @return
	 */
	List<GjzLc> getGjzLcByAddress(@Param("address")String address,@Param("exceptProviderNos")String exceptProviderNos);
	/**
	 * 获取指定浆员的轮次表
	 * @param providerNoList ：卡号集合
	 * @return
	 */
	List<GjzLc> getGjzLcByProviderNo(@Param("list")List<String> providerNoList);
	/**
	 * 获取某个区域某一天登记的老浆员的轮次表
	 * @param address
	 * @return
	 */
	List<GjzLc> getRegGjzLcByAddress(@Param("date")String date,@Param("address")String address);
	/**
	 * 获取某个区域某一天登记的积极浆员的轮次表
	 * @param address
	 * @param endTime ：登记结束时间
	 * @return
	 */
	List<GjzLc> getJijRegGjzLcByAddress(@Param("date")String date,@Param("address")String address,@Param("endTime")String endTime);
	
	/**
	 * 根据日期获取这个日期的轮次
	 * @param date
	 * @return
	 */
	List<XyDmRounds> getXyDmRounds(@Param("date")String date);
	
	/**
	 * 获取某个浆员某一年的采浆记录，如果date不为null，就获取某一天的采浆记录 
	 * @param year
	 * @param date
	 * @param providerNo
	 * @return
	 */
	List<CollectionRecord> getCollectionRecord(@Param("year")String year,@Param("date")String date,@Param("providerNo")String providerNo);
	
	/**
	 * 获取某个浆员的浆龄
	 */
	int getpulpAge(@Param("providerNo")String providerNo);
	
	/**
	 * 获取浆员的献浆总次数、去年献浆量、今年献浆量
	 * @param providerNo
	 * @return
	 */
	Map<String,Object> getPulps(@Param("providerNo")String providerNo);
	/**
	 * 获取浆员的指定日期时间段内的献浆量
	 * @param providerNo
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	int getPulpsByTime(@Param("providerNo")String providerNo,@Param("startTime")String startTime,@Param("endTime")String endTime);
	
	/**
	 * 保存供浆者轮次信息
	 * @param gjzLc
	 */
	void saveGjzLc(GjzLc gjzLc);
	
	/**
	 * 获取某个浆员的伦次表
	 * @param providerNo：卡号
	 * @return
	 */
	GjzLc getGjzLcByPNo(@Param("providerNo")String providerNo);
	/**
	 * 更新供浆者轮次信息
	 * @param gjzLc
	 */
	void updateGjzLc(GjzLc gjzLc);
	/**
	 * 更新供浆者轮次信息
	 * @param gjzLc
	 */
	void updateGjzLcNurse(GjzLc lc);
	
	/**
	 * 根据地址和指定的浆员卡号集合，获取轮次表
	 * @param providerNoList
	 * @param address
	 * @return
	 */
	List<GjzLc> getGjzLcBySituation(@Param("list")List<String> providerNoList, @Param("address")String address);
	/**
	 * 根据五步链接表供浆者信息表查询浆员在轮次表中的链接日期 
	 */
	public  List<GjzLc> getGjzLcByFiveLink();
	/**
	 * 根据供浆者卡号修改轮次对应的日期
	 */
	void updateGjzLcLink(GjzLc gjzLc);
	/**
	 * 查询配置表，以护士id、浆员类型、村落为基础
	 * @param lcCondition
	 * @return
	 */
	public List<GjzLc> getGjzLc(GjzLc lcCondition);
	/**
	 * 根据浆员卡号时间查询五步链接信息
	 * @return
	 */
	public List<LinkNurse> getLinkNurse();
	/**
	 * 修改轮次表中标记为3+日期+护士姓名
	 * @param gjzLc
	 */
	void updateLcLinkNurse(GjzLc gjzLc);
	/**
	 * 根据选择的护士、浆员类型查询村落信息
	 * @param PERSONNAME
	 * @return
	 */
	public List<LinkNurse> getNurseName(String PERSONNAME);
	/**
	 * 根据manageNurse是否为空修改链接状态
	 */
	void updateNoLinkState(GjzLc gjzLc);
	void updateLinkState(GjzLc gjzLc);
	
	/**
	 * 根据卡号统计忠诚浆员信息
	 */	
	public List<JYType> getCurrentTimeZCCollNum(@Param("providerNo")String providerNo);
	/**
	 * 根据卡号统计复苏浆员信息
	 * @param providerNo
	 * @return
	 */
	public List<JYType> getFuSuNum(@Param("providerNo") String providerNo);
	/**
	 * 根据精英数据库 查询建档了未献浆的，和建档未成功的浆员
	 */
	public List<CreateArchives> getNotCjProviderNo(CreateArchives CreateArchives);
	/**
	 * 根据建档了未献浆的，和建档未成功的浆员的卡号查询他们的一个状态
	 */
	public List<BodyCheckJY> getJyState(@Param("providerNo") String providerNo);
	/**
	 * 使用精英数据库查询2018年2月以后的数据      未献浆的或者未建档成功的
	 */
	public List<BodyCheckMX> getMXJYState(@Param("CARDID") String CARDID);
	/**
	 * 根据卡号查询到所有未献浆的浆员  然后进根据建档日期 set到轮次表中  
	 * 
	 */
	public List<UpdateLC> getLCByGJZXX(@Param("providerNo")String providerNo);
	/**
	 * 修改未献浆人在轮次中的建档时间为5:+时间
	 */
	void updateLc(UpdateLC updateLC);
	/**
	 * 根据护士id查询 R类浆员
	 */
	public List<String> getByNurseId(@Param("nurseId")String nurseId);
	/**
	 * 根据护士id查询建档未献浆的浆员
	 */
	public List<String> getByNurseIdNotPulp(@Param("nurseId")String nurseId);
	/**
	 * 根据护士id查询 五步链接的浆员
	 */
	public List<String> getByNurseIdFiveLink(@Param("nurseId")String nurseId);
	/**
	 * 根据前台提交的内容进行修改重点浆员表
	 */
	void updateImportproviderNo(ProviderNurse importantProvider);
	/**
	 * 根据前台传过来的卡号 查询 R类浆员   体检 化简
	 *  胸片没有不合格选项  但是进行到其中某个步骤
	 *  的时候   离开了浆站 导致建档未成功 根据符合
	 *  这个条件的人的
	 */
	public List<TogetherProvider> getByQualified(@Param("CARDID") String CARDID,@Param("time")String time);
	/**
	 * 根据建档建档时间去查上10分钟和下10分钟的建档浆员
	 */
	public List<String> getByCreateRq(@Param("smallTime")String smallTime,@Param("bigTime")String bigTime);
	
	public String getByJDSJ(@Param("CARDID") String CARDID);
	/**
	 * 修改轮次表中的义工信息
	 */
	void updateLcYg(GjzLc gjzLc);

	void insertZDJYLX();
	public List<importantProvider> getJYLXMB();
	
	/**
	 * 根据浆员卡号查询管理护士姓名
	 */
	public String getManagerNurse(@Param("CARDID")String CARDID);
	/**
	 * 根据id号查询介绍人姓名
	 */
	public String getByIdJSR(@Param("ID")String ID);

	/**
	 *根据天统计浆量 
	 */
	public int pulpQuantityDetailRound(@Param("date") String date);
	/**
	 *根据轮次统计浆量
	 */
	public int getEachRoundTotal(@Param("date")String date, @Param("endTime")String endTime);
	/**
	 *根据月份统计浆量
	 */
	public int pulpQuantityDetailMonth(@Param("date")String date,@Param("endTime") String endTime);

	/**
	 * 添加介绍人到轮次表中
	 */
	void updateByJSR();

}
